#ifndef INVENTORY_H
#define INVENTORY_H

#include <QString>
#include <QDateTime>

/**
 * @brief 库存表实体类
 *
 * 该类对应数据库中的库存表，用于记录物料在特定仓库和货架上的库存信息，
 * 包含仓库、货架、物料的关联关系及库存数量等核心数据，并提供标准化的
 * 属性访问方法。
 */
class Inventory
{
private:
    int id;                     // 主键ID，唯一标识一条库存记录
    int warehouse_id;           // 仓库ID，关联所属仓库
    int shelf_id;               // 货架ID，关联存放的货架
    int material_id;            // 物料ID，关联库存的物料
    int inventory_quantity;     // 库存数量，记录该物料在指定位置的数量
    QDateTime create_time;      // 创建时间，记录库存记录的创建时间戳
    QDateTime update_time;      // 更新时间，记录库存信息最后修改的时间戳

public:
    /**
     * @brief 无参构造函数
     *
     * 初始化所有数值类型属性为0，时间戳为默认值，
     * 适合需要后续通过setter方法设置属性的场景。
     */
    Inventory()
        : id(0),
          warehouse_id(0),
          shelf_id(0),
          material_id(0),
          inventory_quantity(0)
    {}

    /**
     * @brief 全参数构造函数
     *
     * 一次性初始化所有属性，适合从数据库读取记录后直接创建对象。
     *
     * @param id                库存记录ID
     * @param warehouse_id      所属仓库ID
     * @param shelf_id          存放货架ID
     * @param material_id       关联物料ID
     * @param inventory_quantity 库存数量
     * @param create_time       创建时间戳
     * @param update_time       最后更新时间戳
     */
    Inventory(int id,
              int warehouse_id,
              int shelf_id,
              int material_id,
              int inventory_quantity,
              const QDateTime& create_time,
              const QDateTime& update_time)
        : id(id),
          warehouse_id(warehouse_id),
          shelf_id(shelf_id),
          material_id(material_id),
          inventory_quantity(inventory_quantity),
          create_time(create_time),
          update_time(update_time)
    {}

    // -------------------------- Getter 方法 --------------------------

    /**
     * @brief 获取库存记录ID
     * @return 库存记录的主键ID
     */
    int get_id() const { return id; }

    /**
     * @brief 获取所属仓库ID
     * @return 关联的仓库ID
     */
    int get_warehouse_id() const { return warehouse_id; }

    /**
     * @brief 获取存放货架ID
     * @return 关联的货架ID
     */
    int get_shelf_id() const { return shelf_id; }

    /**
     * @brief 获取关联物料ID
     * @return 库存物料的ID
     */
    int get_material_id() const { return material_id; }

    /**
     * @brief 获取库存数量
     * @return 该物料在指定位置的库存数量
     */
    int get_inventory_quantity() const { return inventory_quantity; }

    /**
     * @brief 获取创建时间
     * @return 库存记录的创建时间戳
     */
    QDateTime get_create_time() const { return create_time; }

    /**
     * @brief 获取最后更新时间
     * @return 库存信息最后修改的时间戳
     */
    QDateTime get_update_time() const { return update_time; }

    // -------------------------- Setter 方法 --------------------------

    /**
     * @brief 设置库存记录ID
     * @param value 新的库存记录ID
     */
    void set_id(int value) { id = value; }

    /**
     * @brief 设置所属仓库ID
     * @param value 新的仓库ID
     */
    void set_warehouse_id(int value) { warehouse_id = value; }

    /**
     * @brief 设置存放货架ID
     * @param value 新的货架ID
     */
    void set_shelf_id(int value) { shelf_id = value; }

    /**
     * @brief 设置关联物料ID
     * @param value 新的物料ID
     */
    void set_material_id(int value) { material_id = value; }

    /**
     * @brief 设置库存数量
     * @param value 新的库存数量
     */
    void set_inventory_quantity(int value) { inventory_quantity = value; }

    /**
     * @brief 设置创建时间
     * @param value 新的创建时间戳
     */
    void set_create_time(const QDateTime& value) { create_time = value; }

    /**
     * @brief 设置最后更新时间
     * @param value 新的更新时间戳
     */
    void set_update_time(const QDateTime& value) { update_time = value; }
};

#endif // INVENTORY_H
